#pragma once
#include <string>
#include <vector>
#include <set>
#include <map>
#include <mutex>
#include <memory>
using namespace std;

//词典类
class Dictionary{
public:
    ~Dictionary();
    static Dictionary *createInstance(); //获取静态单例对象
    void init(const string &dictpath); //通过词典文件路径初始化词典
    vector<pair<string, int>> &getDict(); //获取中文词典
    map<string, set<int>> &getIndexTable(); //获取中文词典索引表
    vector<pair<string, int>> &getDictEn(); //获取英文词典
    map<string, set<int>> &getIndexTableEn(); //获取英文词典索引表
    string doQuery(string word); //执行查询
private:
    static void initInstance(); //创建静态单例对象，只会被调用一次
private:
    Dictionary();
    static unique_ptr<Dictionary> instance; //词典类的静态单例对象
    static once_flag initDictionaryFlag; //初始化的标志
    vector<pair<string, int>> _dict; //中文词典
    map<string, set<int>> _indexTable; //中文词典索引表
    vector<pair<string, int>> _dictEn; //英文词典
    map<string, set<int>> _indexTableEn; //英文词典索引表
};
